/**
 * Created with IntelliJ IDEA.
 * Description:
 * https://gitee.com/li--jiaqiang/java-test.git
 * git pull
 * git pull origin master
 * git pull origin master --allow-unrelated-histories
 * User: 86187
 * Date: 2022-04-23
 * Time: 9:34
 */

//Scanner scan = new Scanner(System.in);

import java.util.Arrays;
import java.util.Scanner;

public class TestDemo1 {

    /**
     * 二维数组我称之为特殊的一维数组！！！
     * 不规则的二维数组：只指定行，没有指定列
     * 注意区分：C语言中必须指定列，行数可以自动推导
     * 而java 中是必须指定行，列不可以推导！！
     * @param args
     */
    public static void main(String[] args) {
        int[][] array = new int[2][];//有两行，不知道列。且该特殊的一维数组默认值是null
        //那该如何用？？？
        array[0] = new int[3]; //该特殊的一维数组的第一个元素是一个长度为3的一维数组
                                //实际上第一个元素是这个长度为3的一维数组的地址

        array[1] = new int[2];//该特殊的一维数组的第二个元素是一个长度为2的一维数组
                            //实际上第二个元素是这个长度为2的一维数组的地址
        //array 数组未初始化，默认值是 0，打印：： 0 0 0
                                      //     0 0
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");

            }
            System.out.println();
        }

    }


    /**
     * 规则的二维数组：指定了行和列
     * main1 和 main2 所述的是规则的二维数组
     * 二维数组实际就是特殊的一维数组
     * 一维数组的元素存放的是一个一维数组，即一维数组的地址
     * @param args
     */
    public static void main2(String[] args) {
        int[][] array = {{1,2,3},{4,5,6}};

        //二维数组的行数就是该特殊一维数组的长度
        //二位数组的列数是该特殊一维数组中对应的元素指向的一维数组的长度
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");

            }
            System.out.println();
        }
        System.out.println(Arrays.toString(array));//打印的是两个一维数组的地址
        System.out.println();
        System.out.println(Arrays.deepToString(array));//数组元素以字符串形式输出
        System.out.println();

        // for each打印数组
        for (int[] tmp : array) { //array的元素是一维数组，因此用int[] tmp 接收
            for (int x : tmp) {   // tmp 中的元素是int 因此用int x 接收
                System.out.print(x+" ");
            }
            System.out.println();
        }
    }

    /**
     * 二维数组的定义方式
     * @param args
     */
    public static void main1(String[] args) {
        int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
        int[][] array3 = new int[2][3];

    }
}
